/*
 * @lc app=leetcode.cn id=605 lang=cpp
 *
 * [605] 种花问题
 */

// @lc code=start
class Solution {
public:
 bool canPlaceFlowers(vector<int>& flowerbed, int n) {
        int max_flower = 0; // 返回的结果
        int pre = -2; // 记录前一个地址

        for (int i = 0; i < flowerbed.size(); ++i) {
            // 头部处理
            if (i == 0 && flowerbed[i] == 0 && (i + 1 >= flowerbed.size() || flowerbed[i + 1] == 0)) {
                max_flower++;
                pre = i;
            }

            // 计算空位数
            if (flowerbed[i] == 1) {
                if (pre >= 0) {
                    int emptySlots = i - pre - 1;
                    max_flower += emptySlots >= 2 ? (emptySlots - 1) / 2 : 0;
                }
                pre = i;
            }

            // 尾部处理
            if (i == flowerbed.size() - 1 && flowerbed[i] == 0 && pre != i) {
                max_flower += (i - pre) / 2;
            }
        }

        return max_flower >= n;
    }
};
// @lc code=end

